package top.whysu.edevice.dao.system;

import org.apache.ibatis.annotations.Param;
import top.whysu.edevice.dto.system.AccountDTO;
import top.whysu.edevice.po.system.AccountPO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 系统账号数据库操作接口类
 */
public interface AccountDao {

    /**
     * 根据参数查询已启用的用户信息（注意该方法默认account_state='1'表示正常）
     *
     * @param params 查询参数[username: 账号; password: 密码]
     * @return 用户持久化对象
     */
    AccountPO selectOne(Map<String, Object> params);

    /**
     * 根据id查询用户
     *
     * @param id e_system_account的id
     * @return 用户持久化对象
     */
    AccountPO selectById(BigDecimal id);

    /**
     * 根据参数查询用户集合
     *
     * @param params 查询参数[realname: 昵称; username: 账号（手机号码)]
     * @return 用户持久化对象集合
     */
    List<AccountPO> selectList(Map<String, Object> params);

    /**
     * 添加用户
     *
     * @param accountPO 用户持久化对象
     */
    int insert(AccountPO accountPO);

    /**
     * 编辑用户
     *
     * @param accountPO 用户持久化对象
     */
    int update(AccountPO accountPO);

    /**
     * 根据ID删除用户
     *
     * @param id e_system_account的id
     */
    int delete(BigDecimal id);

    /**
     * 根据账号查用户信息
     *
     * @param username 账号
     * @return 用户持久化对象
     */
    AccountPO selectByUsername(@Param("username") String username);

    /**
     * 分页查询用户列表
     *
     * @param params 查询参数[realname: 昵称; username: 账号（手机号码)]
     * @return 用户持久化对象集合
     */
    List<AccountDTO> selectViewList(Map params);

    /**
     * 分页查询用户列表（总数）
     *
     * @param params 查询参数[realname: 昵称; username: 账号（手机号码)]
     * @return 数量
     */
    long countViewList(Map params);

    /**
     * 清空账号对应的萤石账号id
     *
     * @param id 账号id
     */
    void clearEzvizAccountById(BigDecimal id);
}
